﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MMessaging.MessagingEx.Common;

namespace MMessaging.Address.Services
{
	/// <summary>
	/// Basisklasse für MMessaging Plug-Ins. 
	/// Dieses Plug-In ist von MServicePlugInBase abgeleitet und erweitert die
	/// Basisfunktionalitäten eines MMessaging-Plug-Ins um den Handler 
	/// OnServiceStarted(). OnServiceStarted() wird automatisch aufgerufen, wenn der 
	/// Service die Message "MServiceStartedMessage" erhält. 
	/// Services, die von MAddressServiceBase abgeleitet
	/// sind, senden diese Message an sich selbst bei Start des Services.
	/// </summary>
	/// <typeparam name="MESSAGETYPE"></typeparam>
	public abstract class MAddressPlugInBase<MESSAGETYPE> : MServicePlugInBase<MESSAGETYPE>
		where MESSAGETYPE : class
	{
		private bool _started = false;
		protected abstract void OnServiceStarted(IMTask<MESSAGETYPE> task);

		protected override void OnMessage(IMTask<MESSAGETYPE> task)
		{
			if (task.CurrentMessage is MServiceStartedMessage)
			{
				if (!_started)
				{
					_started = true;
					this.Service.RemoveMessageHandler(OnMessage);
					OnServiceStarted(task);
				}
			}
		}
	}
}
